Загрузим данные о заведениях общественного питания Москвы. Изучим общую информацию о датасете.
Для чтения файла импортируем библиотеку pandas, также нам понадобятся библиотеки numpy, matplotlib.pyplot, folium, seaborn
!pip install folium
from folium import Marker, Map, Choropleth
# импортируем кластер
from folium.plugins import MarkerCluster
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import folium as fl
import plotly.express as px
import seaborn as sns
from plotly import graph_objs as go
Requirement already satisfied: folium in c:\users\margarita\anaconda3\lib\site-packages (0.14.0) Requirement already satisfied: requests in c:\users\margarita\anaconda3\lib\site-packages (from folium) (2.27.1) Requirement already satisfied: numpy in c:\users\margarita\anaconda3\lib\site-packages (from folium) (1.21.5) Requirement already satisfied: branca>=0.6.0 in c:\users\margarita\anaconda3\lib\site-packages (from folium) (0.6.0) Requirement already satisfied: jinja2>=2.9 in c:\users\margarita\anaconda3\lib\site-packages (from folium) (2.11.3) Requirement already satisfied: MarkupSafe>=0.23 in c:\users\margarita\anaconda3\lib\site-packages (from jinja2>=2.9->folium) (2.0.1) Requirement already satisfied: certifi>=2017.4.17 in c:\users\margarita\anaconda3\lib\site-packages (from requests->folium) (2021.10.8) Requirement already satisfied: charset-normalizer~=2.0.0 in c:\users\margarita\anaconda3\lib\site-packages (from requests->folium) (2.0.4) Requirement already satisfied: urllib3<1.27,>=1.21.1 in c:\users\margarita\anaconda3\lib\site-packages (from requests->folium) (1.26.9) Requirement already satisfied: idna<4,>=2.5 in c:\users\margarita\anaconda3\lib\site-packages (from requests->folium) (3.3)
moscow_places = pd.read_csv('moscow_places.csv')
# настроим вывод колонок на экран
pd.options.display.float_format = '{: .2f}'.format
pd.options.display.max_colwidth = 150
# describe_column, функция, которая будет выдавать описание данных , количество пропусков,уникальные значения для значений типа 'object
def describe_column(column):
print('Тип данных:', column.dtypes)
print('Количество пропусков:', column.isna().sum())
if column.dtypes == 'object':
print('Уникальные значения столбца', column.sort_values().unique())
print('Описание данных:')
print(column.describe())
print()
print('*'*50)
# функция для просмотра файлов
def description_files(df):
print(f'Изучим информацию')
print()
print('Посмотрим первые 5 строк')
display(df.head(5))
print()
print('*'*50)
print('Выведем информацию о типах данных')
df.info()
print()
print('*'*50)
print('Проверим пропуски')
display(df.isna().sum())
print('Пройдемся по значениям каждого столбца')
print()
print('*'*50)
for column in df:
columnSeriesObj = df[column]
print(f"столбец: {column}")
print()
describe_column(df[column])
print()
print('Проверим дубликаты')
if df.duplicated().sum() ==0:
print('Явных дубликатов нет')
else:
df.drop_duplicates()
print('Явные дубликаты удалены')
description_files(moscow_places)
Изучим информацию Посмотрим первые 5 строк
| name | category | address | district | hours | lat | lng | rating | price | avg_bill | middle_avg_bill | middle_coffee_cup | chain | seats | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | WoWфли | кафе | Москва, улица Дыбенко, 7/1 | Северный административный округ | ежедневно, 10:00–22:00 | 55.88 | 37.48 | 5.00 | NaN | NaN | NaN | NaN | 0 | NaN |
| 1 | Четыре комнаты | ресторан | Москва, улица Дыбенко, 36, корп. 1 | Северный административный округ | ежедневно, 10:00–22:00 | 55.88 | 37.48 | 4.50 | выше среднего | Средний счёт:1500–1600 ₽ | 1550.00 | NaN | 0 | 4.00 |
| 2 | Хазри | кафе | Москва, Клязьминская улица, 15 | Северный административный округ | пн-чт 11:00–02:00; пт,сб 11:00–05:00; вс 11:00–02:00 | 55.89 | 37.53 | 4.60 | средние | Средний счёт:от 1000 ₽ | 1000.00 | NaN | 0 | 45.00 |
| 3 | Dormouse Coffee Shop | кофейня | Москва, улица Маршала Федоренко, 12 | Северный административный округ | ежедневно, 09:00–22:00 | 55.88 | 37.49 | 5.00 | NaN | Цена чашки капучино:155–185 ₽ | NaN | 170.00 | 0 | NaN |
| 4 | Иль Марко | пиццерия | Москва, Правобережная улица, 1Б | Северный административный округ | ежедневно, 10:00–22:00 | 55.88 | 37.45 | 5.00 | средние | Средний счёт:400–600 ₽ | 500.00 | NaN | 1 | 148.00 |
************************************************** Выведем информацию о типах данных <class 'pandas.core.frame.DataFrame'> RangeIndex: 8406 entries, 0 to 8405 Data columns (total 14 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 name 8406 non-null object 1 category 8406 non-null object 2 address 8406 non-null object 3 district 8406 non-null object 4 hours 7870 non-null object 5 lat 8406 non-null float64 6 lng 8406 non-null float64 7 rating 8406 non-null float64 8 price 3315 non-null object 9 avg_bill 3816 non-null object 10 middle_avg_bill 3149 non-null float64 11 middle_coffee_cup 535 non-null float64 12 chain 8406 non-null int64 13 seats 4795 non-null float64 dtypes: float64(6), int64(1), object(7) memory usage: 919.5+ KB ************************************************** Проверим пропуски
name 0 category 0 address 0 district 0 hours 536 lat 0 lng 0 rating 0 price 5091 avg_bill 4590 middle_avg_bill 5257 middle_coffee_cup 7871 chain 0 seats 3611 dtype: int64
Пройдемся по значениям каждого столбца ************************************************** столбец: name Тип данных: object Количество пропусков: 0 Уникальные значения столбца ['#КешбэкКафе' '+39 Pizzeria Mozzarella bar' '1 Этаж' ... 'Ясно' 'Яуза' 'ночной Баку'] Описание данных: count 8406 unique 5614 top Кафе freq 189 Name: name, dtype: object ************************************************** столбец: category Тип данных: object Количество пропусков: 0 Уникальные значения столбца ['бар,паб' 'булочная' 'быстрое питание' 'кафе' 'кофейня' 'пиццерия' 'ресторан' 'столовая'] Описание данных: count 8406 unique 8 top кафе freq 2378 Name: category, dtype: object ************************************************** столбец: address Тип данных: object Количество пропусков: 0 Уникальные значения столбца ['Москва, 1-й Автозаводский проезд, 5' 'Москва, 1-й Балтийский переулок, 3/25' 'Москва, 1-й Варшавский проезд, 1Ас9' ... 'Москва, шоссе Энтузиастов, 86А, корп. 3' 'Москва, шоссе Энтузиастов, с2' 'Москва, № 7'] Описание данных: count 8406 unique 5753 top Москва, проспект Вернадского, 86В freq 28 Name: address, dtype: object ************************************************** столбец: district Тип данных: object Количество пропусков: 0 Уникальные значения столбца ['Восточный административный округ' 'Западный административный округ' 'Северный административный округ' 'Северо-Восточный административный округ' 'Северо-Западный административный округ' 'Центральный административный округ' 'Юго-Восточный административный округ' 'Юго-Западный административный округ' 'Южный административный округ'] Описание данных: count 8406 unique 9 top Центральный административный округ freq 2242 Name: district, dtype: object ************************************************** столбец: hours Тип данных: object Количество пропусков: 536 Уникальные значения столбца ['Нет информации' 'вт 08:30–17:00; ср,чт 12:00–20:30; пт 08:30–17:00; сб 09:00–16:30' 'вт 13:00–21:00; ср 11:00–20:00; чт 13:00–21:00; пт-вс 11:00–20:00' ... 'чт круглосуточно, перерыв 10:00–20:00; сб круглосуточно' 'чт-вс 20:00–06:00' nan] Описание данных: count 7870 unique 1307 top ежедневно, 10:00–22:00 freq 759 Name: hours, dtype: object ************************************************** столбец: lat Тип данных: float64 Количество пропусков: 0 Описание данных: count 8406.00 mean 55.75 std 0.07 min 55.57 25% 55.71 50% 55.75 75% 55.80 max 55.93 Name: lat, dtype: float64 ************************************************** столбец: lng Тип данных: float64 Количество пропусков: 0 Описание данных: count 8406.00 mean 37.61 std 0.10 min 37.36 25% 37.54 50% 37.61 75% 37.66 max 37.87 Name: lng, dtype: float64 ************************************************** столбец: rating Тип данных: float64 Количество пропусков: 0 Описание данных: count 8406.00 mean 4.23 std 0.47 min 1.00 25% 4.10 50% 4.30 75% 4.40 max 5.00 Name: rating, dtype: float64 ************************************************** столбец: price Тип данных: object Количество пропусков: 5091 Уникальные значения столбца ['высокие' 'выше среднего' 'низкие' 'средние' nan] Описание данных: count 3315 unique 4 top средние freq 2117 Name: price, dtype: object ************************************************** столбец: avg_bill Тип данных: object Количество пропусков: 4590 Уникальные значения столбца ['Средний счёт:100 ₽' 'Средний счёт:1000 ₽' 'Средний счёт:1000–10000 ₽' 'Средний счёт:1000–1100 ₽' 'Средний счёт:1000–1200 ₽' 'Средний счёт:1000–1300 ₽' 'Средний счёт:1000–1350 ₽' 'Средний счёт:1000–1400 ₽' 'Средний счёт:1000–1500 ₽' 'Средний счёт:1000–1600 ₽' 'Средний счёт:1000–1700 ₽' 'Средний счёт:1000–2000 ₽' 'Средний счёт:1000–2500 ₽' 'Средний счёт:1000–3000 ₽' 'Средний счёт:1000–5000 ₽' 'Средний счёт:100–1000 ₽' 'Средний счёт:100–160 ₽' 'Средний счёт:100–180 ₽' 'Средний счёт:100–200 ₽' 'Средний счёт:100–2000 ₽' 'Средний счёт:100–270 ₽' 'Средний счёт:100–300 ₽' 'Средний счёт:100–330 ₽' 'Средний счёт:100–350 ₽' 'Средний счёт:100–400 ₽' 'Средний счёт:100–423 ₽' 'Средний счёт:100–500 ₽' 'Средний счёт:100–599 ₽' 'Средний счёт:100–700 ₽' 'Средний счёт:1100–1500 ₽' 'Средний счёт:110–200 ₽' 'Средний счёт:120 ₽' 'Средний счёт:1200 ₽' 'Средний счёт:1200–1300 ₽' 'Средний счёт:1200–1500 ₽' 'Средний счёт:1200–1600 ₽' 'Средний счёт:1200–1700 ₽' 'Средний счёт:1200–1800 ₽' 'Средний счёт:1200–1900 ₽' 'Средний счёт:1200–2000 ₽' 'Средний счёт:1200–2500 ₽' 'Средний счёт:1200–3000 ₽' 'Средний счёт:120–130 ₽' 'Средний счёт:120–150 ₽' 'Средний счёт:120–160 ₽' 'Средний счёт:120–370 ₽' 'Средний счёт:120–470 ₽' 'Средний счёт:1300 ₽' 'Средний счёт:1300–1500 ₽' 'Средний счёт:1300–1600 ₽' 'Средний счёт:1300–1700 ₽' 'Средний счёт:1300–1800 ₽' 'Средний счёт:1300–2000 ₽' 'Средний счёт:1300–2100 ₽' 'Средний счёт:1300–2500 ₽' 'Средний счёт:130–140 ₽' 'Средний счёт:130–200 ₽' 'Средний счёт:130–350 ₽' 'Средний счёт:130–700 ₽' 'Средний счёт:1330 ₽' 'Средний счёт:1400 ₽' 'Средний счёт:1400–1500 ₽' 'Средний счёт:1400–1600 ₽' 'Средний счёт:1400–1700 ₽' 'Средний счёт:1400–1800 ₽' 'Средний счёт:140–142 ₽' 'Средний счёт:140–160 ₽' 'Средний счёт:140–250 ₽' 'Средний счёт:140–350 ₽' 'Средний счёт:149–249 ₽' 'Средний счёт:150 ₽' 'Средний счёт:1500 ₽' 'Средний счёт:1500–1600 ₽' 'Средний счёт:1500–1700 ₽' 'Средний счёт:1500–1800 ₽' 'Средний счёт:1500–1880 ₽' 'Средний счёт:1500–1900 ₽' 'Средний счёт:1500–2000 ₽' 'Средний счёт:1500–2500 ₽' 'Средний счёт:1500–3000 ₽' 'Средний счёт:1500–3500 ₽' 'Средний счёт:1500–4000 ₽' 'Средний счёт:1500–5000 ₽' 'Средний счёт:150–1000 ₽' 'Средний счёт:150–180 ₽' 'Средний счёт:150–200 ₽' 'Средний счёт:150–220 ₽' 'Средний счёт:150–250 ₽' 'Средний счёт:150–260 ₽' 'Средний счёт:150–300 ₽' 'Средний счёт:150–350 ₽' 'Средний счёт:150–400 ₽' 'Средний счёт:150–450 ₽' 'Средний счёт:150–500 ₽' 'Средний счёт:150–599 ₽' 'Средний счёт:150–600 ₽' 'Средний счёт:150–650 ₽' 'Средний счёт:150–700 ₽' 'Средний счёт:1600 ₽' 'Средний счёт:160–200 ₽' 'Средний счёт:160–240 ₽' 'Средний счёт:160–250 ₽' 'Средний счёт:160–500 ₽' 'Средний счёт:170 ₽' 'Средний счёт:1700 ₽' 'Средний счёт:1700–1900 ₽' 'Средний счёт:1700–2500 ₽' 'Средний счёт:170–220 ₽' 'Средний счёт:170–230 ₽' 'Средний счёт:170–280 ₽' 'Средний счёт:170–300 ₽' 'Средний счёт:170–350 ₽' 'Средний счёт:170–490 ₽' 'Средний счёт:170–700 ₽' 'Средний счёт:180 ₽' 'Средний счёт:1800 ₽' 'Средний счёт:1800–2000 ₽' 'Средний счёт:1800–2500 ₽' 'Средний счёт:180–1170 ₽' 'Средний счёт:180–220 ₽' 'Средний счёт:180–280 ₽' 'Средний счёт:180–350 ₽' 'Средний счёт:190 ₽' 'Средний счёт:1900 ₽' 'Средний счёт:1900–2500 ₽' 'Средний счёт:190–260 ₽' 'Средний счёт:190–280 ₽' 'Средний счёт:190–290 ₽' 'Средний счёт:190–350 ₽' 'Средний счёт:195–235 ₽' 'Средний счёт:199 ₽' 'Средний счёт:199–450 ₽' 'Средний счёт:1–2000 ₽' 'Средний счёт:200 ₽' 'Средний счёт:2000 ₽' 'Средний счёт:20000–50000 ₽' 'Средний счёт:2000–2500 ₽' 'Средний счёт:2000–3000 ₽' 'Средний счёт:2000–3500 ₽' 'Средний счёт:2000–4000 ₽' 'Средний счёт:2000–5000 ₽' 'Средний счёт:200–1000 ₽' 'Средний счёт:200–220 ₽' 'Средний счёт:200–250 ₽' 'Средний счёт:200–270 ₽' 'Средний счёт:200–280 ₽' 'Средний счёт:200–300 ₽' 'Средний счёт:200–350 ₽' 'Средний счёт:200–360 ₽' 'Средний счёт:200–400 ₽' 'Средний счёт:200–450 ₽' 'Средний счёт:200–500 ₽' 'Средний счёт:200–600 ₽' 'Средний счёт:200–700 ₽' 'Средний счёт:205–500 ₽' 'Средний счёт:2100 ₽' 'Средний счёт:220 ₽' 'Средний счёт:2200 ₽' 'Средний счёт:220–270 ₽' 'Средний счёт:220–300 ₽' 'Средний счёт:220–350 ₽' 'Средний счёт:220–500 ₽' 'Средний счёт:229 ₽' 'Средний счёт:2300 ₽' 'Средний счёт:230–250 ₽' 'Средний счёт:230–280 ₽' 'Средний счёт:230–300 ₽' 'Средний счёт:230–350 ₽' 'Средний счёт:230–500 ₽' 'Средний счёт:230–650 ₽' 'Средний счёт:232–387 ₽' 'Средний счёт:240 ₽' 'Средний счёт:2400 ₽' 'Средний счёт:240–350 ₽' 'Средний счёт:240–360 ₽' 'Средний счёт:240–500 ₽' 'Средний счёт:250 ₽' 'Средний счёт:2500 ₽' 'Средний счёт:2500–3000 ₽' 'Средний счёт:2500–3500 ₽' 'Средний счёт:2500–4000 ₽' 'Средний счёт:2500–4500 ₽' 'Средний счёт:2500–5000 ₽' 'Средний счёт:250–1000 ₽' 'Средний счёт:250–270 ₽' 'Средний счёт:250–280 ₽' 'Средний счёт:250–300 ₽' 'Средний счёт:250–320 ₽' 'Средний счёт:250–350 ₽' 'Средний счёт:250–380 ₽' 'Средний счёт:250–400 ₽' 'Средний счёт:250–430 ₽' 'Средний счёт:250–450 ₽' 'Средний счёт:250–480 ₽' 'Средний счёт:250–500 ₽' 'Средний счёт:250–550 ₽' 'Средний счёт:250–600 ₽' 'Средний счёт:250–700 ₽' 'Средний счёт:250–800 ₽' 'Средний счёт:260 ₽' 'Средний счёт:2600 ₽' 'Средний счёт:260–1000 ₽' 'Средний счёт:260–280 ₽' 'Средний счёт:260–290 ₽' 'Средний счёт:260–300 ₽' 'Средний счёт:260–400 ₽' 'Средний счёт:266 ₽' 'Средний счёт:269 ₽' 'Средний счёт:270 ₽' 'Средний счёт:270–300 ₽' 'Средний счёт:270–350 ₽' 'Средний счёт:270–400 ₽' 'Средний счёт:270–450 ₽' 'Средний счёт:275 ₽' 'Средний счёт:275–500 ₽' 'Средний счёт:280 ₽' 'Средний счёт:280–290 ₽' 'Средний счёт:280–320 ₽' 'Средний счёт:280–330 ₽' 'Средний счёт:280–350 ₽' 'Средний счёт:280–360 ₽' 'Средний счёт:280–400 ₽' 'Средний счёт:280–420 ₽' 'Средний счёт:280–450 ₽' 'Средний счёт:285 ₽' 'Средний счёт:290 ₽' 'Средний счёт:2900 ₽' 'Средний счёт:290–490 ₽' 'Средний счёт:290–500 ₽' 'Средний счёт:291 ₽' 'Средний счёт:298 ₽' 'Средний счёт:299 ₽' 'Средний счёт:299–400 ₽' 'Средний счёт:299–450 ₽' 'Средний счёт:300 ₽' 'Средний счёт:3000 ₽' 'Средний счёт:3000–3500 ₽' 'Средний счёт:3000–4000 ₽' 'Средний счёт:3000–5000 ₽' 'Средний счёт:300–1000 ₽' 'Средний счёт:300–1500 ₽' 'Средний счёт:300–1600 ₽' 'Средний счёт:300–2000 ₽' 'Средний счёт:300–350 ₽' 'Средний счёт:300–400 ₽' 'Средний счёт:300–420 ₽' 'Средний счёт:300–430 ₽' 'Средний счёт:300–450 ₽' 'Средний счёт:300–500 ₽' 'Средний счёт:300–550 ₽' 'Средний счёт:300–600 ₽' 'Средний счёт:300–650 ₽' 'Средний счёт:300–700 ₽' 'Средний счёт:300–800 ₽' 'Средний счёт:301 ₽' 'Средний счёт:304 ₽' 'Средний счёт:30–300 ₽' 'Средний счёт:310–370 ₽' 'Средний счёт:313 ₽' 'Средний счёт:317 ₽' 'Средний счёт:320 ₽' 'Средний счёт:320–1500 ₽' 'Средний счёт:320–350 ₽' 'Средний счёт:320–480 ₽' 'Средний счёт:321 ₽' 'Средний счёт:324 ₽' 'Средний счёт:328 ₽' 'Средний счёт:330 ₽' 'Средний счёт:330–400 ₽' 'Средний счёт:330–990 ₽' 'Средний счёт:339 ₽' 'Средний счёт:340 ₽' 'Средний счёт:340–550 ₽' 'Средний счёт:343 ₽' 'Средний счёт:344 ₽' 'Средний счёт:349 ₽' 'Средний счёт:350 ₽' 'Средний счёт:3500 ₽' 'Средний счёт:3500–4000 ₽' 'Средний счёт:3500–5000 ₽' 'Средний счёт:350–1000 ₽' 'Средний счёт:350–1500 ₽' 'Средний счёт:350–2000 ₽' 'Средний счёт:350–2400 ₽' 'Средний счёт:350–400 ₽' 'Средний счёт:350–420 ₽' 'Средний счёт:350–450 ₽' 'Средний счёт:350–500 ₽' 'Средний счёт:350–550 ₽' 'Средний счёт:350–600 ₽' 'Средний счёт:350–650 ₽' 'Средний счёт:350–700 ₽' 'Средний счёт:350–800 ₽' 'Средний счёт:355 ₽' 'Средний счёт:35–100 ₽' 'Средний счёт:35–180 ₽' 'Средний счёт:35–300 ₽' 'Средний счёт:360 ₽' 'Средний счёт:360–500 ₽' 'Средний счёт:360–540 ₽' 'Средний счёт:362 ₽' 'Средний счёт:363 ₽' 'Средний счёт:366 ₽' 'Средний счёт:370 ₽' 'Средний счёт:372 ₽' 'Средний счёт:373 ₽' 'Средний счёт:375 ₽' 'Средний счёт:380–1010 ₽' 'Средний счёт:380–400 ₽' 'Средний счёт:380–500 ₽' 'Средний счёт:380–600 ₽' 'Средний счёт:382 ₽' 'Средний счёт:383 ₽' 'Средний счёт:385 ₽' 'Средний счёт:385–580 ₽' 'Средний счёт:390–1000 ₽' 'Средний счёт:390–460 ₽' 'Средний счёт:390–500 ₽' 'Средний счёт:390–660 ₽' 'Средний счёт:390–700 ₽' 'Средний счёт:391 ₽' 'Средний счёт:392 ₽' 'Средний счёт:400 ₽' 'Средний счёт:4000 ₽' 'Средний счёт:4000–5000 ₽' 'Средний счёт:400–1000 ₽' 'Средний счёт:400–1200 ₽' 'Средний счёт:400–1500 ₽' 'Средний счёт:400–2500 ₽' 'Средний счёт:400–450 ₽' 'Средний счёт:400–500 ₽' 'Средний счёт:400–550 ₽' 'Средний счёт:400–600 ₽' 'Средний счёт:400–6000 ₽' 'Средний счёт:400–650 ₽' 'Средний счёт:400–700 ₽' 'Средний счёт:400–800 ₽' 'Средний счёт:400–900 ₽' 'Средний счёт:402 ₽' 'Средний счёт:404 ₽' 'Средний счёт:407 ₽' 'Средний счёт:410 ₽' 'Средний счёт:411 ₽' 'Средний счёт:412 ₽' 'Средний счёт:413 ₽' 'Средний счёт:415 ₽' 'Средний счёт:416 ₽' 'Средний счёт:420–680 ₽' 'Средний счёт:422 ₽' 'Средний счёт:426 ₽' 'Средний счёт:430 ₽' 'Средний счёт:432 ₽' 'Средний счёт:433 ₽' 'Средний счёт:434 ₽' 'Средний счёт:435 ₽' 'Средний счёт:438 ₽' 'Средний счёт:439 ₽' 'Средний счёт:441 ₽' 'Средний счёт:443 ₽' 'Средний счёт:450 ₽' 'Средний счёт:4500–5000 ₽' 'Средний счёт:4500–5500 ₽' 'Средний счёт:450–500 ₽' 'Средний счёт:450–550 ₽' 'Средний счёт:450–600 ₽' 'Средний счёт:450–650 ₽' 'Средний счёт:450–700 ₽' 'Средний счёт:450–750 ₽' 'Средний счёт:450–800 ₽' 'Средний счёт:450–900 ₽' 'Средний счёт:453 ₽' 'Средний счёт:465 ₽' 'Средний счёт:470 ₽' 'Средний счёт:472 ₽' 'Средний счёт:475 ₽' 'Средний счёт:480 ₽' 'Средний счёт:495 ₽' 'Средний счёт:499–700 ₽' 'Средний счёт:49–369 ₽' 'Средний счёт:50 ₽' 'Средний счёт:500 ₽' 'Средний счёт:5000 ₽' 'Средний счёт:5000–15000 ₽' 'Средний счёт:5000–17000 ₽' 'Средний счёт:5000–5500 ₽' 'Средний счёт:5000–8000 ₽' 'Средний счёт:500–1000 ₽' 'Средний счёт:500–1050 ₽' 'Средний счёт:500–1100 ₽' 'Средний счёт:500–1200 ₽' 'Средний счёт:500–1300 ₽' 'Средний счёт:500–1500 ₽' 'Средний счёт:500–2000 ₽' 'Средний счёт:500–2500 ₽' 'Средний счёт:500–3000 ₽' 'Средний счёт:500–5000 ₽' 'Средний счёт:500–520 ₽' 'Средний счёт:500–550 ₽' 'Средний счёт:500–600 ₽' 'Средний счёт:500–650 ₽' 'Средний счёт:500–700 ₽' 'Средний счёт:500–750 ₽' 'Средний счёт:500–800 ₽' 'Средний счёт:500–900 ₽' 'Средний счёт:503 ₽' 'Средний счёт:508 ₽' 'Средний счёт:50–200 ₽' 'Средний счёт:50–250 ₽' 'Средний счёт:50–300 ₽' 'Средний счёт:520–1200 ₽' 'Средний счёт:520–600 ₽' 'Средний счёт:550 ₽' 'Средний счёт:5500 ₽' 'Средний счёт:550–1300 ₽' 'Средний счёт:550–1500 ₽' 'Средний счёт:550–1550 ₽' 'Средний счёт:550–700 ₽' 'Средний счёт:550–750 ₽' 'Средний счёт:590–1490 ₽' 'Средний счёт:600 ₽' 'Средний счёт:6000 ₽' 'Средний счёт:6000–8000 ₽' 'Средний счёт:600–1000 ₽' 'Средний счёт:600–1200 ₽' 'Средний счёт:600–1300 ₽' 'Средний счёт:600–1500 ₽' 'Средний счёт:600–2000 ₽' 'Средний счёт:600–700 ₽' 'Средний счёт:600–750 ₽' 'Средний счёт:600–800 ₽' 'Средний счёт:600–900 ₽' 'Средний счёт:600–950 ₽' 'Средний счёт:60–140 ₽' 'Средний счёт:60–180 ₽' 'Средний счёт:60–400 ₽' 'Средний счёт:620 ₽' 'Средний счёт:650 ₽' 'Средний счёт:650–1000 ₽' 'Средний счёт:650–2000 ₽' 'Средний счёт:650–800 ₽' 'Средний счёт:650–850 ₽' 'Средний счёт:670 ₽' 'Средний счёт:69–499 ₽' 'Средний счёт:700 ₽' 'Средний счёт:7000 ₽' 'Средний счёт:7000–7500 ₽' 'Средний счёт:700–1000 ₽' 'Средний счёт:700–1100 ₽' 'Средний счёт:700–1200 ₽' 'Средний счёт:700–1300 ₽' 'Средний счёт:700–1400 ₽' 'Средний счёт:700–1500 ₽' 'Средний счёт:700–1800 ₽' 'Средний счёт:700–3000 ₽' 'Средний счёт:700–3500 ₽' 'Средний счёт:700–800 ₽' 'Средний счёт:700–850 ₽' 'Средний счёт:700–900 ₽' 'Средний счёт:70–150 ₽' 'Средний счёт:70–200 ₽' 'Средний счёт:750 ₽' 'Средний счёт:750–1000 ₽' 'Средний счёт:750–1200 ₽' 'Средний счёт:750–1500 ₽' 'Средний счёт:750–850 ₽' 'Средний счёт:750–900 ₽' 'Средний счёт:795–1325 ₽' 'Средний счёт:800 ₽' 'Средний счёт:800–1000 ₽' 'Средний счёт:800–1100 ₽' 'Средний счёт:800–1200 ₽' 'Средний счёт:800–1300 ₽' 'Средний счёт:800–1500 ₽' 'Средний счёт:800–1800 ₽' 'Средний счёт:800–2000 ₽' 'Средний счёт:800–3000 ₽' 'Средний счёт:80–220 ₽' 'Средний счёт:80–300 ₽' 'Средний счёт:80–340 ₽' 'Средний счёт:80–350 ₽' 'Средний счёт:850 ₽' 'Средний счёт:850–1000 ₽' 'Средний счёт:850–1100 ₽' 'Средний счёт:850–1200 ₽' 'Средний счёт:850–1500 ₽' 'Средний счёт:90 ₽' 'Средний счёт:900 ₽' 'Средний счёт:900–1000 ₽' 'Средний счёт:900–1100 ₽' 'Средний счёт:900–1150 ₽' 'Средний счёт:900–1200 ₽' 'Средний счёт:900–1400 ₽' 'Средний счёт:900–1500 ₽' 'Средний счёт:90–190 ₽' 'Средний счёт:90–230 ₽' 'Средний счёт:90–450 ₽' 'Средний счёт:950–1200 ₽' 'Средний счёт:950–1500 ₽' 'Средний счёт:99–500 ₽' 'Средний счёт:до 1000 ₽' 'Средний счёт:до 1500 ₽' 'Средний счёт:до 300 ₽' 'Средний счёт:до 350 ₽' 'Средний счёт:до 470 ₽' 'Средний счёт:до 500 ₽' 'Средний счёт:до 650 ₽' 'Средний счёт:от 0 ₽' 'Средний счёт:от 100 ₽' 'Средний счёт:от 1000 ₽' 'Средний счёт:от 1090 ₽' 'Средний счёт:от 120 ₽' 'Средний счёт:от 1200 ₽' 'Средний счёт:от 140 ₽' 'Средний счёт:от 1400 ₽' 'Средний счёт:от 150 ₽' 'Средний счёт:от 1500 ₽' 'Средний счёт:от 165 ₽' 'Средний счёт:от 175 ₽' 'Средний счёт:от 180 ₽' 'Средний счёт:от 1800 ₽' 'Средний счёт:от 199 ₽' 'Средний счёт:от 200 ₽' 'Средний счёт:от 2000 ₽' 'Средний счёт:от 230 ₽' 'Средний счёт:от 240 ₽' 'Средний счёт:от 250 ₽' 'Средний счёт:от 2500 ₽' 'Средний счёт:от 270 ₽' 'Средний счёт:от 30 ₽' 'Средний счёт:от 300 ₽' 'Средний счёт:от 3000 ₽' 'Средний счёт:от 320 ₽' 'Средний счёт:от 330 ₽' 'Средний счёт:от 340 ₽' 'Средний счёт:от 345 ₽' 'Средний счёт:от 350 ₽' 'Средний счёт:от 3500 ₽' 'Средний счёт:от 390 ₽' 'Средний счёт:от 399 ₽' 'Средний счёт:от 400 ₽' 'Средний счёт:от 4000 ₽' 'Средний счёт:от 420 ₽' 'Средний счёт:от 450 ₽' 'Средний счёт:от 470 ₽' 'Средний счёт:от 475 ₽' 'Средний счёт:от 499 ₽' 'Средний счёт:от 50 ₽' 'Средний счёт:от 500 ₽' 'Средний счёт:от 5000 ₽' 'Средний счёт:от 549 ₽' 'Средний счёт:от 600 ₽' 'Средний счёт:от 650 ₽' 'Средний счёт:от 700 ₽' 'Средний счёт:от 800 ₽' 'Средний счёт:от 850 ₽' 'Цена бокала пива:100–250 ₽' 'Цена бокала пива:120–350 ₽' 'Цена бокала пива:129–319 ₽' 'Цена бокала пива:130–150 ₽' 'Цена бокала пива:140–190 ₽' 'Цена бокала пива:140–330 ₽' 'Цена бокала пива:140–420 ₽' 'Цена бокала пива:150 ₽' 'Цена бокала пива:150–180 ₽' 'Цена бокала пива:150–230 ₽' 'Цена бокала пива:150–250 ₽' 'Цена бокала пива:150–290 ₽' 'Цена бокала пива:150–350 ₽' 'Цена бокала пива:150–450 ₽' 'Цена бокала пива:155–465 ₽' 'Цена бокала пива:160–350 ₽' 'Цена бокала пива:160–390 ₽' 'Цена бокала пива:160–499 ₽' 'Цена бокала пива:170–200 ₽' 'Цена бокала пива:170–240 ₽' 'Цена бокала пива:170–320 ₽' 'Цена бокала пива:170–380 ₽' 'Цена бокала пива:180–260 ₽' 'Цена бокала пива:180–330 ₽' 'Цена бокала пива:180–380 ₽' 'Цена бокала пива:180–400 ₽' 'Цена бокала пива:180–420 ₽' 'Цена бокала пива:180–480 ₽' 'Цена бокала пива:190–350 ₽' 'Цена бокала пива:190–390 ₽' 'Цена бокала пива:190–430 ₽' 'Цена бокала пива:190–450 ₽' 'Цена бокала пива:190–500 ₽' 'Цена бокала пива:199–300 ₽' 'Цена бокала пива:199–459 ₽' 'Цена бокала пива:200 ₽' 'Цена бокала пива:200–1100 ₽' 'Цена бокала пива:200–240 ₽' 'Цена бокала пива:200–300 ₽' 'Цена бокала пива:200–320 ₽' 'Цена бокала пива:200–350 ₽' 'Цена бокала пива:200–380 ₽' 'Цена бокала пива:200–390 ₽' 'Цена бокала пива:200–440 ₽' 'Цена бокала пива:220–250 ₽' 'Цена бокала пива:220–350 ₽' 'Цена бокала пива:220–390 ₽' 'Цена бокала пива:220–440 ₽' 'Цена бокала пива:220–450 ₽' 'Цена бокала пива:220–500 ₽' 'Цена бокала пива:220–550 ₽' 'Цена бокала пива:230 ₽' 'Цена бокала пива:230–350 ₽' 'Цена бокала пива:240–350 ₽' 'Цена бокала пива:240–380 ₽' 'Цена бокала пива:250–350 ₽' 'Цена бокала пива:250–390 ₽' 'Цена бокала пива:250–395 ₽' 'Цена бокала пива:250–400 ₽' 'Цена бокала пива:250–450 ₽' 'Цена бокала пива:250–490 ₽' 'Цена бокала пива:250–550 ₽' 'Цена бокала пива:260–360 ₽' 'Цена бокала пива:260–380 ₽' 'Цена бокала пива:260–400 ₽' 'Цена бокала пива:270–1100 ₽' 'Цена бокала пива:270–390 ₽' 'Цена бокала пива:270–490 ₽' 'Цена бокала пива:280 ₽' 'Цена бокала пива:280–360 ₽' 'Цена бокала пива:280–400 ₽' 'Цена бокала пива:280–410 ₽' 'Цена бокала пива:290–390 ₽' 'Цена бокала пива:290–440 ₽' 'Цена бокала пива:300 ₽' 'Цена бокала пива:300–400 ₽' 'Цена бокала пива:300–420 ₽' 'Цена бокала пива:300–475 ₽' 'Цена бокала пива:300–500 ₽' 'Цена бокала пива:300–600 ₽' 'Цена бокала пива:320–375 ₽' 'Цена бокала пива:320–380 ₽' 'Цена бокала пива:320–440 ₽' 'Цена бокала пива:320–460 ₽' 'Цена бокала пива:320–470 ₽' 'Цена бокала пива:330–490 ₽' 'Цена бокала пива:340 ₽' 'Цена бокала пива:340–420 ₽' 'Цена бокала пива:350 ₽' 'Цена бокала пива:350–370 ₽' 'Цена бокала пива:350–400 ₽' 'Цена бокала пива:350–500 ₽' 'Цена бокала пива:360 ₽' 'Цена бокала пива:370–410 ₽' 'Цена бокала пива:370–420 ₽' 'Цена бокала пива:380–400 ₽' 'Цена бокала пива:390 ₽' 'Цена бокала пива:390–530 ₽' 'Цена бокала пива:390–590 ₽' 'Цена бокала пива:39–190 ₽' 'Цена бокала пива:420–640 ₽' 'Цена бокала пива:88–460 ₽' 'Цена бокала пива:90–230 ₽' 'Цена бокала пива:90–250 ₽' 'Цена бокала пива:до 350 ₽' 'Цена бокала пива:от 100 ₽' 'Цена бокала пива:от 140 ₽' 'Цена бокала пива:от 149 ₽' 'Цена бокала пива:от 195 ₽' 'Цена бокала пива:от 200 ₽' 'Цена бокала пива:от 350 ₽' 'Цена чашки капучино:100 ₽' 'Цена чашки капучино:100–120 ₽' 'Цена чашки капучино:100–140 ₽' 'Цена чашки капучино:100–150 ₽' 'Цена чашки капучино:100–160 ₽' 'Цена чашки капучино:100–170 ₽' 'Цена чашки капучино:100–179 ₽' 'Цена чашки капучино:100–180 ₽' 'Цена чашки капучино:100–200 ₽' 'Цена чашки капучино:100–210 ₽' 'Цена чашки капучино:100–220 ₽' 'Цена чашки капучино:105–145 ₽' 'Цена чашки капучино:109–169 ₽' 'Цена чашки капучино:110 ₽' 'Цена чашки капучино:110–150 ₽' 'Цена чашки капучино:110–160 ₽' 'Цена чашки капучино:110–165 ₽' 'Цена чашки капучино:110–170 ₽' 'Цена чашки капучино:110–190 ₽' 'Цена чашки капучино:110–200 ₽' 'Цена чашки капучино:115–140 ₽' 'Цена чашки капучино:119–149 ₽' 'Цена чашки капучино:119–169 ₽' 'Цена чашки капучино:119–179 ₽' 'Цена чашки капучино:120 ₽' 'Цена чашки капучино:120–140 ₽' 'Цена чашки капучино:120–150 ₽' 'Цена чашки капучино:120–160 ₽' 'Цена чашки капучино:120–170 ₽' 'Цена чашки капучино:120–180 ₽' 'Цена чашки капучино:120–190 ₽' 'Цена чашки капучино:120–200 ₽' 'Цена чашки капучино:120–210 ₽' 'Цена чашки капучино:120–215 ₽' 'Цена чашки капучино:120–220 ₽' 'Цена чашки капучино:120–250 ₽' 'Цена чашки капучино:128–148 ₽' 'Цена чашки капучино:129–169 ₽' 'Цена чашки капучино:129–179 ₽' 'Цена чашки капучино:130 ₽' 'Цена чашки капучино:130–150 ₽' 'Цена чашки капучино:130–160 ₽' 'Цена чашки капучино:130–170 ₽' 'Цена чашки капучино:130–180 ₽' 'Цена чашки капучино:130–190 ₽' 'Цена чашки капучино:130–210 ₽' 'Цена чашки капучино:130–230 ₽' 'Цена чашки капучино:130–250 ₽' 'Цена чашки капучино:139–189 ₽' 'Цена чашки капучино:140–160 ₽' 'Цена чашки капучино:140–170 ₽' 'Цена чашки капучино:140–180 ₽' 'Цена чашки капучино:140–190 ₽' 'Цена чашки капучино:140–200 ₽' 'Цена чашки капучино:140–220 ₽' 'Цена чашки капучино:145–185 ₽' 'Цена чашки капучино:145–200 ₽' 'Цена чашки капучино:145–225 ₽' 'Цена чашки капучино:149–199 ₽' 'Цена чашки капучино:149–219 ₽' 'Цена чашки капучино:149–259 ₽' 'Цена чашки капучино:150 ₽' 'Цена чашки капучино:150–180 ₽' 'Цена чашки капучино:150–190 ₽' 'Цена чашки капучино:150–200 ₽' 'Цена чашки капучино:150–210 ₽' 'Цена чашки капучино:150–219 ₽' 'Цена чашки капучино:150–220 ₽' 'Цена чашки капучино:150–240 ₽' 'Цена чашки капучино:150–245 ₽' 'Цена чашки капучино:150–250 ₽' 'Цена чашки капучино:150–290 ₽' 'Цена чашки капучино:150–320 ₽' 'Цена чашки капучино:155–170 ₽' 'Цена чашки капучино:155–185 ₽' 'Цена чашки капучино:159 ₽' 'Цена чашки капучино:159–200 ₽' 'Цена чашки капучино:160–180 ₽' 'Цена чашки капучино:160–200 ₽' 'Цена чашки капучино:160–210 ₽' 'Цена чашки капучино:160–220 ₽' 'Цена чашки капучино:160–230 ₽' 'Цена чашки капучино:160–250 ₽' 'Цена чашки капучино:160–270 ₽' 'Цена чашки капучино:160–350 ₽' 'Цена чашки капучино:170–190 ₽' 'Цена чашки капучино:170–200 ₽' 'Цена чашки капучино:170–210 ₽' 'Цена чашки капучино:170–220 ₽' 'Цена чашки капучино:170–230 ₽' 'Цена чашки капучино:170–239 ₽' 'Цена чашки капучино:170–250 ₽' 'Цена чашки капучино:179–219 ₽' 'Цена чашки капучино:179–249 ₽' 'Цена чашки капучино:179–275 ₽' 'Цена чашки капучино:179–314 ₽' 'Цена чашки капучино:180–200 ₽' 'Цена чашки капучино:180–210 ₽' 'Цена чашки капучино:180–230 ₽' 'Цена чашки капучино:180–250 ₽' 'Цена чашки капучино:180–300 ₽' 'Цена чашки капучино:184–194 ₽' 'Цена чашки капучино:185–285 ₽' 'Цена чашки капучино:189–269 ₽' 'Цена чашки капучино:190–220 ₽' 'Цена чашки капучино:190–230 ₽' 'Цена чашки капучино:190–240 ₽' 'Цена чашки капучино:190–245 ₽' 'Цена чашки капучино:190–250 ₽' 'Цена чашки капучино:195 ₽' 'Цена чашки капучино:195–245 ₽' 'Цена чашки капучино:195–295 ₽' 'Цена чашки капучино:199–229 ₽' 'Цена чашки капучино:199–285 ₽' 'Цена чашки капучино:200 ₽' 'Цена чашки капучино:200–220 ₽' 'Цена чашки капучино:200–240 ₽' 'Цена чашки капучино:200–250 ₽' 'Цена чашки капучино:200–260 ₽' 'Цена чашки капучино:200–275 ₽' 'Цена чашки капучино:200–300 ₽' 'Цена чашки капучино:200–350 ₽' 'Цена чашки капучино:205–245 ₽' 'Цена чашки капучино:205–280 ₽' 'Цена чашки капучино:210–250 ₽' 'Цена чашки капучино:210–290 ₽' 'Цена чашки капучино:220 ₽' 'Цена чашки капучино:220–240 ₽' 'Цена чашки капучино:220–250 ₽' 'Цена чашки капучино:220–270 ₽' 'Цена чашки капучино:220–280 ₽' 'Цена чашки капучино:220–320 ₽' 'Цена чашки капучино:220–330 ₽' 'Цена чашки капучино:220–350 ₽' 'Цена чашки капучино:230–250 ₽' 'Цена чашки капучино:230–280 ₽' 'Цена чашки капучино:230–290 ₽' 'Цена чашки капучино:230–2907 ₽' 'Цена чашки капучино:230–320 ₽' 'Цена чашки капучино:230–350 ₽' 'Цена чашки капучино:235–335 ₽' 'Цена чашки капучино:239–269 ₽' 'Цена чашки капучино:239–274 ₽' 'Цена чашки капучино:239–279 ₽' 'Цена чашки капучино:240 ₽' 'Цена чашки капучино:249–284 ₽' 'Цена чашки капучино:249–309 ₽' 'Цена чашки капучино:250 ₽' 'Цена чашки капучино:250–270 ₽' 'Цена чашки капучино:250–280 ₽' 'Цена чашки капучино:250–290 ₽' 'Цена чашки капучино:250–300 ₽' 'Цена чашки капучино:250–330 ₽' 'Цена чашки капучино:250–340 ₽' 'Цена чашки капучино:250–350 ₽' 'Цена чашки капучино:250–390 ₽' 'Цена чашки капучино:250–500 ₽' 'Цена чашки капучино:270 ₽' 'Цена чашки капучино:270–280 ₽' 'Цена чашки капучино:275 ₽' 'Цена чашки капучино:279–378 ₽' 'Цена чашки капучино:280–350 ₽' 'Цена чашки капучино:284–299 ₽' 'Цена чашки капучино:285–289 ₽' 'Цена чашки капучино:285–310 ₽' 'Цена чашки капучино:300 ₽' 'Цена чашки капучино:300–350 ₽' 'Цена чашки капучино:50–150 ₽' 'Цена чашки капучино:59–99 ₽' 'Цена чашки капучино:60–100 ₽' 'Цена чашки капучино:60–120 ₽' 'Цена чашки капучино:60–150 ₽' 'Цена чашки капучино:60–180 ₽' 'Цена чашки капучино:60–300 ₽' 'Цена чашки капучино:60–90 ₽' 'Цена чашки капучино:65–140 ₽' 'Цена чашки капучино:69–99 ₽' 'Цена чашки капучино:70–150 ₽' 'Цена чашки капучино:75 ₽' 'Цена чашки капучино:75–150 ₽' 'Цена чашки капучино:80–120 ₽' 'Цена чашки капучино:80–150 ₽' 'Цена чашки капучино:80–160 ₽' 'Цена чашки капучино:80–175 ₽' 'Цена чашки капучино:80–240 ₽' 'Цена чашки капучино:85–350 ₽' 'Цена чашки капучино:89–149 ₽' 'Цена чашки капучино:89–209 ₽' 'Цена чашки капучино:89–229 ₽' 'Цена чашки капучино:90–100 ₽' 'Цена чашки капучино:90–110 ₽' 'Цена чашки капучино:90–130 ₽' 'Цена чашки капучино:90–140 ₽' 'Цена чашки капучино:90–150 ₽' 'Цена чашки капучино:90–158 ₽' 'Цена чашки капучино:90–160 ₽' 'Цена чашки капучино:90–170 ₽' 'Цена чашки капучино:90–180 ₽' 'Цена чашки капучино:90–240 ₽' 'Цена чашки капучино:90–250 ₽' 'Цена чашки капучино:90–98 ₽' 'Цена чашки капучино:90–99 ₽' 'Цена чашки капучино:95 ₽' 'Цена чашки капучино:95–159 ₽' 'Цена чашки капучино:98–150 ₽' 'Цена чашки капучино:99–169 ₽' 'Цена чашки капучино:99–179 ₽' 'Цена чашки капучино:99–180 ₽' 'Цена чашки капучино:99–200 ₽' 'Цена чашки капучино:до 150 ₽' 'Цена чашки капучино:до 179 ₽' 'Цена чашки капучино:от 100 ₽' 'Цена чашки капучино:от 110 ₽' 'Цена чашки капучино:от 120 ₽' 'Цена чашки капучино:от 129 ₽' 'Цена чашки капучино:от 130 ₽' 'Цена чашки капучино:от 139 ₽' 'Цена чашки капучино:от 150 ₽' 'Цена чашки капучино:от 160 ₽' 'Цена чашки капучино:от 169 ₽' 'Цена чашки капучино:от 170 ₽' 'Цена чашки капучино:от 180 ₽' 'Цена чашки капучино:от 200 ₽' 'Цена чашки капучино:от 205 ₽' 'Цена чашки капучино:от 230 ₽' 'Цена чашки капучино:от 250 ₽' 'Цена чашки капучино:от 270 ₽' 'Цена чашки капучино:от 300 ₽' 'Цена чашки капучино:от 60 ₽' 'Цена чашки капучино:от 89 ₽' 'Цена чашки капучино:от 90 ₽' nan] Описание данных: count 3816 unique 897 top Средний счёт:1000–1500 ₽ freq 241 Name: avg_bill, dtype: object ************************************************** столбец: middle_avg_bill Тип данных: float64 Количество пропусков: 5257 Описание данных: count 3149.00 mean 958.05 std 1009.73 min 0.00 25% 375.00 50% 750.00 75% 1250.00 max 35000.00 Name: middle_avg_bill, dtype: float64 ************************************************** столбец: middle_coffee_cup Тип данных: float64 Количество пропусков: 7871 Описание данных: count 535.00 mean 174.72 std 88.95 min 60.00 25% 124.50 50% 169.00 75% 225.00 max 1568.00 Name: middle_coffee_cup, dtype: float64 ************************************************** столбец: chain Тип данных: int64 Количество пропусков: 0 Описание данных: count 8406.00 mean 0.38 std 0.49 min 0.00 25% 0.00 50% 0.00 75% 1.00 max 1.00 Name: chain, dtype: float64 ************************************************** столбец: seats Тип данных: float64 Количество пропусков: 3611 Описание данных: count 4795.00 mean 108.42 std 122.83 min 0.00 25% 40.00 50% 75.00 75% 140.00 max 1288.00 Name: seats, dtype: float64 ************************************************** Проверим дубликаты Явных дубликатов нет
hours (дни и часы работы) - 536 пропусковprice — категория цен в заведении, например «средние», «ниже среднего», «выше среднего» и так далее - 5091 пропускavg_bill (хранит среднюю стоимость заказа в виде диапазона) - 4590 пропусковmiddle_avg_bill - 5257 пропусков middle_coffee_cup - 7871 пропускseats - 3611 пропусков Уникальных названий заведений на первый взгляд - 5614 (логично, что меньше, чем данных, так как есть сети), но возможны неявные дубликаты, надо проверить
hours (часы работы) записаны очень разнообразно, несмотря на то, что часть заполнена "Нет информации", имеются пропуски. Логично их заполнить той же фразой "Нет информации". С другой стороны, можно не заполнять, так как будем категорировать заведения по принципу круглосуточной работы. rating рейтинг распределен от 1.0 до 5.0price Категории цен: 'высокие' 'выше среднего' 'низкие' 'средние'. Можно попробовать дозаполнить исходя из столбца "middle_avg_bill" и "middle_coffee_cup", но в дальнейшем этот столбец нам не понадобится. middle_avg_bill должен содержать информацию о среднем чеке, если столбец avg_bill, начинается с подстроки «Средний счёт», но минимальное значение этого столбца равно - 0, в заполнении данных произошла ошибкаmiddle_coffee_cup - Цена одной чашки капучино от 60 до 1568 руб.seats - имеет и пропуски и значения 0. Вызывает сомнение максимальное значение - 1288 посадочных мест. display(moscow_places.query('seats == 1288'))
| name | category | address | district | hours | lat | lng | rating | price | avg_bill | middle_avg_bill | middle_coffee_cup | chain | seats | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 6518 | DelonixCafe | ресторан | Москва, проспект Вернадского, 94, корп. 1 | Западный административный округ | ежедневно, круглосуточно | 55.65 | 37.48 | 4.10 | высокие | Средний счёт:1500–2000 ₽ | 1750.00 | NaN | 0 | 1288.00 |
| 6524 | Ян Примус | ресторан | Москва, проспект Вернадского, 121, корп. 1 | Западный административный округ | пн-чт 12:00–00:00; пт,сб 12:00–02:00; вс 12:00–00:00 | 55.66 | 37.48 | 4.50 | выше среднего | Средний счёт:1500 ₽ | 1500.00 | NaN | 1 | 1288.00 |
| 6574 | Мюнгер | пиццерия | Москва, проспект Вернадского, 97, корп. 1 | Западный административный округ | пн-пт 08:00–21:00; сб,вс 10:00–21:00 | 55.67 | 37.49 | 4.80 | NaN | NaN | NaN | NaN | 1 | 1288.00 |
| 6641 | One Price Coffee | кофейня | Москва, проспект Вернадского, 84, стр. 1 | Западный административный округ | ежедневно, 08:30–20:00 | 55.67 | 37.48 | 4.30 | NaN | NaN | NaN | NaN | 1 | 1288.00 |
| 6658 | ГудБар | бар,паб | Москва, проспект Вернадского, 97, корп. 1 | Западный административный округ | пн-пт 11:00–23:00; сб,вс 13:00–23:00 | 55.67 | 37.49 | 4.10 | средние | Средний счёт:700 ₽ | 700.00 | NaN | 0 | 1288.00 |
| 6684 | Пивной ресторан | бар,паб | Москва, проспект Вернадского, 121, корп. 1 | Западный административный округ | NaN | 55.66 | 37.48 | 4.50 | NaN | NaN | NaN | NaN | 0 | 1288.00 |
| 6690 | Японская кухня | ресторан | Москва, проспект Вернадского, 121, корп. 1 | Западный административный округ | NaN | 55.66 | 37.48 | 4.40 | NaN | NaN | NaN | NaN | 1 | 1288.00 |
| 6771 | Точка | кафе | Москва, проспект Вернадского, 84, стр. 1 | Западный административный округ | NaN | 55.67 | 37.48 | 4.70 | NaN | NaN | NaN | NaN | 1 | 1288.00 |
| 6807 | Loft-cafe академия | кафе | Москва, проспект Вернадского, 84, стр. 1 | Западный административный округ | пн-пт 09:00–20:00; сб 09:00–16:00 | 55.67 | 37.48 | 3.60 | NaN | NaN | NaN | NaN | 0 | 1288.00 |
| 6808 | Яндекс Лавка | ресторан | Москва, проспект Вернадского, 51, стр. 1 | Западный административный округ | ежедневно, круглосуточно | 55.67 | 37.51 | 4.00 | NaN | NaN | NaN | NaN | 1 | 1288.00 |
| 6838 | Alternative coffee | кофейня | Москва, проспект Вернадского, 41, стр. 1 | Западный административный округ | пн-пт 09:00–21:00; сб,вс 09:00–22:00 | 55.67 | 37.50 | 4.30 | NaN | NaN | NaN | NaN | 0 | 1288.00 |
Все заведения с 1288 посадочными местами расположены на проспекте Вернадского, некоторые в одном доме. В данных есть ошибка, возможно, заведения расположены на фудкорте и получили общее количество мест. Дальше в исследовании будем брать медианные значения, поэтому выбросы в количестве посадочных мест не повлияют на данные
Изучим, есть ли дубликаты в данных.
Создадим столбец street с названиями улиц из столбца с адресом.
для проверки на неявные дубликаты приведем названия заведений к одному виду - к верхнему регистру
moscow_places['name']=moscow_places['name'].str.upper()
display(moscow_places[['name','address']].duplicated().sum())
3
нашли три дубликата. удалим их
moscow_places = moscow_places.loc[moscow_places[['name','address']].duplicated() == False]
# функция выделения названия улицы из адреса
def street_from_address(address):
address = address.split(',')
return address[1].lstrip()
moscow_places['street'] = moscow_places['address'].apply(street_from_address)
# функция определения круглосуточного режима работы
def is_24_7(hours):
hours=str(hours)
if 'ежедневно' in hours and 'круглосуточно' in hours:
return True
else:
return False
moscow_places['is_24/7'] = moscow_places['hours'].apply(is_24_7)
print('Всего заведений, работающих 24 часа 7 дней в неделю:', moscow_places.loc[moscow_places.loc[:,'is_24/7'] == True].name.count())
Всего заведений, работающих 24 часа 7 дней в неделю: 730
streetis_24/7 Типов заведений 8: 'бар,паб' 'булочная' 'быстрое питание' 'кафе' 'кофейня' 'пиццерия', 'ресторан' 'столовая'
moscow_places.groupby('category')['name'].count().sort_values(ascending=False)
category кафе 2377 ресторан 2042 кофейня 1413 бар,паб 764 пиццерия 633 быстрое питание 603 столовая 315 булочная 256 Name: name, dtype: int64
fig = px.bar(moscow_places.groupby('category')['name'].count().sort_values(ascending=False).reset_index(), x='name', y='category', title='Распределение объектов общественного питания по категориям', labels={'name':'количество','category':'категория'})
fig.update_xaxes(tickangle=45)
fig.update_traces(textposition='inside', textfont_size=15)
fig.update_traces(marker_color='blue', marker_line_color='blue',
marker_line_width=1, opacity=0.4)
fig.show()
fig = px.bar(moscow_places.groupby('category')['seats'].median().sort_values(ascending=False).reset_index(), x='category', y='seats', title='Распределение медианного количества посадочных мест по категориям ', labels={'seats':'количество','category':'категория'})
fig.update_xaxes(tickangle=45)
fig.show()
df_grouped=moscow_places.groupby('category').median().sort_values(by='seats')
sns.set_palette('pastel')
plt.figure(figsize=(10, 10))
plt.title('Распределение количества посадочных мест по категориям',fontsize=15)
ax = sns.boxplot(x='seats',y='category', data=moscow_places, orient='h',order=df_grouped.index);
plt.xlim(0,320)
plt.xlabel('Посадочные места', fontsize=13)
plt.ylabel('Категория',fontsize=13)
sns.despine()
Количество посадочных мест в среднем (медианное) от 50 для булочной до 86 посадочных мест для ресторана.Разброс посадочных мест везде большой (самый большой у быстрого питания, что логично, так как это может быть и шаурма без посадочных мест, так и шаурма на фудкорте)
moscow_places['chain']=moscow_places['chain'].astype("string").replace({'0':'несетевой','1':'сетевой'})
# функция построения распределения по заданным параметрам: передаем датафрейм, колонки, по которым строим распределение, обозначение оси х, название графика
def distribution_category (data,name,name2,namex, title_,table_is=True,text_on=False):
data_grouped = data.pivot_table(index=[name,name2],values='address', aggfunc='count')
if table_is == True: display(data.groupby([name,name2],sort=False)['name'].count())
data_grouped = data_grouped.reset_index().rename(columns={'address':'count'}).sort_values(by='count',ascending=False)
if text_on==True:
fig = px.bar(data_grouped, y=data_grouped[name], x=data_grouped['count'], color=data_grouped[name2], title=title_, labels={'count':'количество заведений',name:namex}, text=data_grouped['count'],orientation='h')
else:
fig = px.bar(data_grouped, y=data_grouped[name], x=data_grouped['count'], color=data_grouped[name2], title=title_, labels={'count':'количество заведений',name:namex},orientation='h')
fig.update_xaxes(tickangle=45)
fig.update_layout(yaxis={'categoryorder':'total ascending'})
fig.update_layout(
autosize=False,
width=900 ,
height=600,)
fig.show()
distribution_category (moscow_places,'chain','category','отношение к сети', 'Распределение сетевых и несетевых заведений по категориям',False,True)
distribution_category (moscow_places,'category','chain','категория', 'Распределение сетевых и несетевых заведений по категориям',False,True)
Сетевых заведений 3203, несетевых - 5200. Несетевых на 40% больше,чем сетевых
top_15_chain = moscow_places.query('chain == "сетевой"').groupby('name')['name'].count().sort_values(ascending=False).reset_index(name='count').head(15)
top_15_chain
| name | count | |
|---|---|---|
| 0 | ШОКОЛАДНИЦА | 120 |
| 1 | ДОМИНО'С ПИЦЦА | 76 |
| 2 | ДОДО ПИЦЦА | 74 |
| 3 | ONE PRICE COFFEE | 71 |
| 4 | ЯНДЕКС ЛАВКА | 69 |
| 5 | COFIX | 65 |
| 6 | PRIME | 50 |
| 7 | ХИНКАЛЬНАЯ | 44 |
| 8 | КОФЕПОРТ | 42 |
| 9 | КУЛИНАРНАЯ ЛАВКА БРАТЬЕВ КАРАВАЕВЫХ | 39 |
| 10 | ТЕРЕМОК | 38 |
| 11 | ЧАЙХАНА | 37 |
| 12 | COFEFEST | 32 |
| 13 | БУХАНКА | 32 |
| 14 | МУ-МУ | 27 |
# выведем в отдельную таблицу заведения, относящиеся к топ-15 сетей
moscow_chain=moscow_places.merge(top_15_chain)
plt.figure(figsize=(14, 8))
# строим столбчатый график средствами seaborn
sns.barplot(x='name', y='count', data=moscow_chain.sort_values(by='count',ascending=False))
# формируем заголовок графика и подписи осей
plt.title('Топ-15 популярных сетей в Москве',fontsize=15)
plt.xlabel('Название сети', fontsize=12)
plt.ylabel('Количество заведений',fontsize=12)
# поворачиваем подписи значений по оси X на 45 градусов
plt.xticks(rotation=45)
plt.show()
moscow_chain.groupby('name')['rating'].median().sort_values()
name ЯНДЕКС ЛАВКА 4.00 COFEFEST 4.05 COFIX 4.10 ТЕРЕМОК 4.10 ЧАЙХАНА 4.10 ONE PRICE COFFEE 4.20 PRIME 4.20 ДОМИНО'С ПИЦЦА 4.20 КОФЕПОРТ 4.20 ШОКОЛАДНИЦА 4.20 ДОДО ПИЦЦА 4.30 МУ-МУ 4.30 БУХАНКА 4.40 КУЛИНАРНАЯ ЛАВКА БРАТЬЕВ КАРАВАЕВЫХ 4.40 ХИНКАЛЬНАЯ 4.40 Name: rating, dtype: float64
Медианный рейтинг заведений из топ-15 сетей от 4.0 до 4.40
distribution_category (moscow_chain,'name','category','сеть', 'Распределение топ-15 сетей по категориям',True,True)
name category
БУХАНКА булочная 25
кофейня 6
кафе 1
ДОДО ПИЦЦА пиццерия 74
ДОМИНО'С ПИЦЦА пиццерия 77
COFEFEST кофейня 31
кафе 1
COFIX кофейня 65
МУ-МУ кафе 12
ресторан 8
кофейня 2
быстрое питание 2
пиццерия 1
столовая 1
бар,паб 1
ТЕРЕМОК ресторан 36
быстрое питание 2
ЧАЙХАНА кафе 26
быстрое питание 2
ресторан 9
ХИНКАЛЬНАЯ быстрое питание 6
кафе 19
ресторан 15
столовая 1
бар,паб 3
ONE PRICE COFFEE кофейня 72
ШОКОЛАДНИЦА кофейня 119
кафе 1
ЯНДЕКС ЛАВКА ресторан 69
КОФЕПОРТ кофейня 42
PRIME ресторан 49
кафе 1
КУЛИНАРНАЯ ЛАВКА БРАТЬЕВ КАРАВАЕВЫХ кафе 39
Name: name, dtype: int64
Из графика видно, что некоторые заведения (Чайхана, Буханка, Му-Му, Хинкальная) имеют разную категорию:
plt.figure(figsize=(14, 8))
# строим столбчатый график средствами seaborn
sns.barplot(x='category', y='address', data=moscow_chain.pivot_table(index=['category'],values='address', aggfunc='count').sort_values(by='address',ascending=False).reset_index(),color='#5d83b3')
# формируем заголовок графика и подписи осей
plt.title('Распределение заведений из Топ-15 популярных сетей в Москве по категориям',fontsize=15)
plt.xlabel('Категория', fontsize=12)
plt.ylabel('Количество заведений',fontsize=12)
# поворачиваем подписи значений по оси X на 45 градусов
plt.xticks(rotation=45)
plt.show()
moscow_chain.pivot_table(index=['category'],values='address', aggfunc='count').sort_values(by='address',ascending=False).reset_index()
| category | address | |
|---|---|---|
| 0 | кофейня | 337 |
| 1 | ресторан | 186 |
| 2 | пиццерия | 152 |
| 3 | кафе | 100 |
| 4 | булочная | 25 |
| 5 | быстрое питание | 12 |
| 6 | бар,паб | 4 |
| 7 | столовая | 2 |
moscow_places.groupby('district')['name'].count().sort_values(ascending=False)
district Центральный административный округ 2242 Северный административный округ 899 Южный административный округ 892 Северо-Восточный административный округ 890 Западный административный округ 850 Восточный административный округ 798 Юго-Восточный административный округ 714 Юго-Западный административный округ 709 Северо-Западный административный округ 409 Name: name, dtype: int64
В данных представлены 9 округов города Москвы (отсутствуют данные по "Зеленограду" и "Новой Москве"), больше всего заведений (2242) расположены в Центральном административном округе.
#Распределение заведений по округам и по категориям
distribution_category (moscow_places,'district','category','округ', 'Распределение заведений по округам')
district category
Северный административный округ кафе 235
ресторан 188
кофейня 193
пиццерия 77
бар,паб 68
...
Южный административный округ быстрое питание 85
кафе 264
столовая 44
булочная 25
пиццерия 73
Name: name, Length: 72, dtype: int64
Больше всего заведений расположено в Центральном административном округе (ЦАО)(2242). Самый популярный тип заведения в ЦАО -ресторан, кафе, кофейня. Меньше всего заведений - в Северо-Западном административном округе (СЗАО) - 409. Наиболее распространены - кафе, ресторан, кофейня
df_grouped=moscow_places.groupby('category').median().sort_values(by='rating')
df_grouped
| lat | lng | rating | middle_avg_bill | middle_coffee_cup | seats | is_24/7 | |
|---|---|---|---|---|---|---|---|
| category | |||||||
| быстрое питание | 55.74 | 37.62 | 4.20 | 375.00 | 140.00 | 65.00 | 0.00 |
| кафе | 55.75 | 37.61 | 4.20 | 550.00 | 111.00 | 60.00 | 0.00 |
| булочная | 55.75 | 37.59 | 4.30 | 450.00 | NaN | 50.00 | 0.00 |
| кофейня | 55.76 | 37.60 | 4.30 | 400.00 | 170.00 | 80.00 | 0.00 |
| пиццерия | 55.75 | 37.60 | 4.30 | 600.00 | 150.00 | 55.00 | 0.00 |
| ресторан | 55.75 | 37.60 | 4.30 | 1250.00 | NaN | 86.00 | 0.00 |
| столовая | 55.76 | 37.62 | 4.30 | 300.00 | NaN | 75.50 | 0.00 |
| бар,паб | 55.76 | 37.61 | 4.40 | 1250.00 | 202.50 | 82.00 | 0.00 |
plt.figure(figsize=(10, 10))
plt.title('Распределение средних рейтингов по категориям заведений',fontsize=15)
ax = sns.boxplot(x='rating',y='category', data=moscow_places, orient='h',order=df_grouped.index);
plt.xlabel('Рейтинг', fontsize=13)
plt.ylabel('Категория',fontsize=13)
plt.xlim(3,5)
sns.despine()
Распределение усредненных рейтингов по категориям отличается несильно, во всех категориях есть заведения с очень низким рейтингом, а средний рейтинг расположен в диапазоне 4.20-4.40, выше рейтинг у баров(пабов) - 4.4, самый низкий у быстрого питания и кафе - 4.2
Границы районов Москвы, которые встречаются в датасете, хранятся в файле admin_level_geomap.geojson
# посчитаем средний рейтинг для каждого округа
rating_df = moscow_places.groupby('district', as_index=False)['rating'].agg('median')
# импортируем хороплет
moscow_lat, moscow_lng = 55.751244, 37.618423
# создаём объект m – карту с центром в точке с координатами [moscow_lat, moscow_lng]
m = Map(location=[moscow_lat, moscow_lng])
# загружаем JSON-файл с границами округов Москвы
state_geo = 'https://code.s3.yandex.net/data-analyst/admin_level_geomap.geojson'
# создаём хороплет с помощью конструктора Choropleth и добавляем его на карту
Choropleth(
geo_data=state_geo,
data=rating_df,
columns=['district', 'rating'],
key_on='feature.name',
fill_color='YlGnBu',
fill_opacity=0.8,
legend_name='Медианный рейтинг заведений по округам',
).add_to(m)
# выводим карту
m
Максимальный средний рейтинг заведений в ЦАО -4.4, минимальный - Юго-восточный и Северо-Восточный округа - 4.2.
ЦАО популярен, так как в нем много туристических мест, а также адмиистративных заведений. Также в ЦАО расположено много дорогих заведений , которые следят за своей маркой. Иметь плохой рейтинг себе дороже, так как конкуренция большая, аренда высокая.
# moscow_lat - широта центра Москвы, moscow_lng - долгота центра Москвы
moscow_lat, moscow_lng = 55.751244, 37.618423
# создаём объект m – карту с центром в точке с координатами [moscow_lat, moscow_lng]
m = Map(location=[moscow_lat, moscow_lng])
# выводим карту
# создаём пустой кластер, добавляем его на карту
marker_cluster = MarkerCluster().add_to(m)
# пишем функцию, которая принимает строку датафрейма,
# создаёт маркер в текущей точке и добавляет его в кластер marker_cluster
def create_clusters(row):
Marker(
[row['lat'], row['lng']],
popup=f"{row['name']} {row['rating']}",
).add_to(marker_cluster)
# применяем функцию create_clusters() к каждой строке датафрейма
moscow_places.apply(create_clusters, axis=1)
# выводим карту
m
Построим график распределения количества заведений и их категорий по этим улицам.
top_15_street = moscow_places.groupby('street')['name'].count().sort_values(ascending=False).reset_index(name='count').head(15)
top_15_street
| street | count | |
|---|---|---|
| 0 | проспект Мира | 183 |
| 1 | Профсоюзная улица | 122 |
| 2 | проспект Вернадского | 108 |
| 3 | Ленинский проспект | 107 |
| 4 | Ленинградский проспект | 95 |
| 5 | Дмитровское шоссе | 88 |
| 6 | Каширское шоссе | 77 |
| 7 | Варшавское шоссе | 76 |
| 8 | Ленинградское шоссе | 70 |
| 9 | МКАД | 65 |
| 10 | Люблинская улица | 60 |
| 11 | улица Вавилова | 55 |
| 12 | Кутузовский проспект | 54 |
| 13 | улица Миклухо-Маклая | 49 |
| 14 | Пятницкая улица | 48 |
top_15_street['count'].sum()
1257
top_15_street_places = moscow_places.merge(top_15_street).sort_values(by='count',ascending=False)
distribution_category (top_15_street_places,'district','category','округ', 'Распределение заведений на Топ-15 улиц по категориям и округам',False)
#распределение заведений на топ-15 улицах
m = Map(location=[moscow_lat, moscow_lng])
# выводим карту
# создаём пустой кластер, добавляем его на карту
marker_cluster = MarkerCluster().add_to(m)
# пишем функцию, которая принимает строку датафрейма,
# создаёт маркер в текущей точке и добавляет его в кластер marker_cluster
def create_clusters(row):
Marker(
[row['lat'], row['lng']],
popup=f"{row['name']} {row['rating']}",
).add_to(marker_cluster)
# применяем функцию create_clusters() к каждой строке датафрейма
top_15_street_places.apply(create_clusters, axis=1)
# выводим карту
m
distribution_category (top_15_street_places,'is_24/7','category','круглосуточное', 'Распределение заведений на ТОП-15 улиц по типу и режиму работы',False)
183 находится на Проспекте Мира,122 на Профсоюзной, 108 на Проспекте Вернадского
### список улиц с одним заведением общественного питания
one_place_street = moscow_places.groupby('street')['name'].count().reset_index(name='count').query('count==1')['street'].to_list()
print('Всего заведений, которые являются единственными на улице:', len(one_place_street))
Всего заведений, которые являются единственными на улице: 458
moscow_places_one_place_street=moscow_places.query('street in @one_place_street')
#распределение заведений единственных на улицах
m = Map(location=[moscow_lat, moscow_lng])
# выводим карту
# создаём пустой кластер, добавляем его на карту
marker_cluster = MarkerCluster().add_to(m)
# пишем функцию, которая принимает строку датафрейма,
# создаёт маркер в текущей точке и добавляет его в кластер marker_cluster
def create_clusters(row):
Marker(
[row['lat'], row['lng']],
popup=f"{row['name']} {row['rating']}",
).add_to(marker_cluster)
# применяем функцию create_clusters() к каждой строке датафрейма
moscow_places_one_place_street.apply(create_clusters, axis=1)
# выводим карту
m
distribution_category (moscow_places_one_place_street,'district','category','округ', 'Распределение единственных заведений на улице по категориям и округам',False)
Единственных заведений много в ЦАО, это объясняется наличием множества проулков, переулков и небольших улиц в этом округе
distribution_category (moscow_places_one_place_street,'is_24/7','category','круглосуточное', 'Распределение единственных заведений на улице по категориям и режиму работы',False)
Единственные на улице заведения работают в основном не круглосуточно, круглосуточно работают кафе(13), рестораны (9)
df_grouped = df_grouped=moscow_places_one_place_street.groupby('category').median().sort_values(by='rating')
plt.figure(figsize=(10, 10))
plt.title('Распределение средних рейтингов по категориям заведений,единственных на улице',fontsize=15)
ax = sns.boxplot(x='rating',y='category', data=moscow_places_one_place_street, orient='h',order=df_grouped.index);
plt.xlabel('Рейтинг', fontsize=13)
plt.ylabel('Категория',fontsize=13)
plt.xlim(3,5)
sns.despine()
df_grouped['rating']
category кафе 4.20 быстрое питание 4.30 кофейня 4.30 пиццерия 4.30 ресторан 4.30 столовая 4.30 булочная 4.35 бар,паб 4.50 Name: rating, dtype: float64
Медианные рейтинги единственных на улице заведений категории бар,паб (4.5) и булочная (4.35) выше, чем у Топ-15 сетевых заведений
Всего заведений, которые являются единственными на улице: 458. Таких заведений много в ЦАО, это объясняется наличием множества проулков, переулков и небольших улиц в этом округе. В основном они работают не круглосуточно, круглосуточно работают 13 кафе и 9 ресторанов. Рейтинги единственных на улице заведений от 4.2 до 4.50. Высокий рейтинг у заведения категории бар,паб (4.5) и булочная (4.35). Рейтинг выше, чем у Топ-15 сетевых заведений
# посчитаем средний чек для каждого округа
middle_avg_bill_df = moscow_places.groupby('district', as_index=False)['middle_avg_bill'].agg('median').sort_values(by='middle_avg_bill')
middle_avg_bill_df
| district | middle_avg_bill | |
|---|---|---|
| 6 | Юго-Восточный административный округ | 450.00 |
| 3 | Северо-Восточный административный округ | 500.00 |
| 8 | Южный административный округ | 500.00 |
| 0 | Восточный административный округ | 575.00 |
| 7 | Юго-Западный административный округ | 600.00 |
| 2 | Северный административный округ | 650.00 |
| 4 | Северо-Западный административный округ | 700.00 |
| 1 | Западный административный округ | 1000.00 |
| 5 | Центральный административный округ | 1000.00 |
m = Map(location=[moscow_lat, moscow_lng])
# создаём хороплет с помощью конструктора Choropleth и добавляем его на карту
Choropleth(
geo_data=state_geo,
data=middle_avg_bill_df,
columns=['district', 'middle_avg_bill'],
key_on='feature.name',
fill_color='YlGnBu',
fill_opacity=0.8,
legend_name='Средний чек заведений по округам',
).add_to(m)
# выводим карту
m
Максимальный средний чек в ЦАО и ЗАО, можно отметить, что в этих округах и самые высокие рейтинги заведений общественного питания. И наоборот, самый низкий чек в округах, где был отмечен самый низкий рейтинг - ЮВАО (450 рублей), СВАО (500 руб) и ЮАО(500 руб.)
Сетевых заведений 3203, несетевых - 5200. Несетевых на 40% больше,чем сетевых
Топ-15 сетей: 'БУХАНКА', 'ДОДО ПИЦЦА', "ДОМИНО'С ПИЦЦА", 'COFEFEST', 'COFIX', 'МУ-МУ', 'ТЕРЕМОК', 'ЧАЙХАНА', 'ХИНКАЛЬНАЯ', 'ONE PRICE COFFEE', 'ШОКОЛАДНИЦА', 'ЯНДЕКС ЛАВКА', 'КОФЕПОРТ', 'PRIME', 'КУЛИНАРНАЯ ЛАВКА БРАТЬЕВ КАРАВАЕВЫХ. 5 из них относятся к кофейням.
Основателям фонда «Shut Up and Take My Money» не даёт покоя успех сериала «Друзья». Их мечта — открыть такую же крутую и доступную, как «Central Perk», кофейню в Москве. Будем считать, что заказчики не боятся конкуренции в этой сфере, ведь кофеен в больших городах уже достаточно. Попробуем определить, осуществима ли мечта клиентов. Ответим на следующие вопросы:
moscow_coffee_house = moscow_places.query('category=="кофейня"')
print('Всего кофеен в Москве:',moscow_coffee_house.name.count())
print('Кофеен, являющихся единственными на улице:', moscow_places_one_place_street.query('category=="кофейня"').name.count())
Всего кофеен в Москве: 1413 Кофеен, являющихся единственными на улице: 84
moscow_coffee_house.groupby('district')['name'].count().sort_values()
district Северо-Западный административный округ 62 Юго-Восточный административный округ 89 Юго-Западный административный округ 96 Восточный административный округ 105 Южный административный округ 131 Западный административный округ 150 Северо-Восточный административный округ 159 Северный административный округ 193 Центральный административный округ 428 Name: name, dtype: int64
moscow_coffee_house.groupby('district')['name'].count().sort_values(ascending=False).plot(kind='bar', xlabel='округ',ylabel='количество заведений',figsize=(10,6))
plt.xticks(rotation=30)
plt.title('Распределение кофеен по округам');
Всего в Москве 1413 кофеен, из них 428 расположено в ЦАО, что в 2 раза больше, чем в других округах
moscow_coffee_house.groupby('district')['name'].count().sort_values().reset_index()
| district | name | |
|---|---|---|
| 0 | Северо-Западный административный округ | 62 |
| 1 | Юго-Восточный административный округ | 89 |
| 2 | Юго-Западный административный округ | 96 |
| 3 | Восточный административный округ | 105 |
| 4 | Южный административный округ | 131 |
| 5 | Западный административный округ | 150 |
| 6 | Северо-Восточный административный округ | 159 |
| 7 | Северный административный округ | 193 |
| 8 | Центральный административный округ | 428 |
fig = go.Figure()
fig.add_trace(go.Bar(name='Кофейни',
x=moscow_coffee_house.groupby('district')['name'].count().sort_values(ascending=False).reset_index()['district'],
y=moscow_coffee_house.groupby('district')['name'].count().sort_values(ascending=False).reset_index()['name'],
text=moscow_coffee_house.groupby('district')['name'].count().sort_values(ascending=False).reset_index()['name'],textposition='outside'))
fig.add_trace(go.Bar(name='Круглосуточные кофейни',
x=moscow_coffee_house.loc[moscow_coffee_house.loc[:,'is_24/7'] == True].groupby('district')['name'].count().sort_values(ascending=False).reset_index()['district'],
y=moscow_coffee_house.loc[moscow_coffee_house.loc[:,'is_24/7'] == True].groupby('district')['name'].count().sort_values(ascending=False).reset_index()['name'],
text=moscow_coffee_house.loc[moscow_coffee_house.loc[:,'is_24/7'] == True].groupby('district')['name'].count().sort_values(ascending=False).reset_index()['name'],textposition='outside'))
fig.update_layout(title='Распределение кофеен и круглосуточных кофеен по округам')
fig.show()
distribution_category (moscow_coffee_house,'district','is_24/7','округ', 'Соотношение круглосуточных и не круглосуточных кофеен',False)
Круглосуточных кофеен мало, большинство (26) расположены в ЦАО, можно отменить, что в каждом округе имеется хотя бы одна круглосуточная кофейня
df_grouped=moscow_coffee_house.groupby('district').median().sort_values(by='rating')
df_grouped
| lat | lng | rating | middle_avg_bill | middle_coffee_cup | seats | is_24/7 | |
|---|---|---|---|---|---|---|---|
| district | |||||||
| Западный административный округ | 55.73 | 37.49 | 4.20 | 600.00 | 189.00 | 96.00 | 0.00 |
| Восточный административный округ | 55.79 | 37.75 | 4.30 | 400.00 | 135.00 | 55.00 | 0.00 |
| Северный административный округ | 55.81 | 37.52 | 4.30 | 325.00 | 159.00 | 66.00 | 0.00 |
| Северо-Восточный административный округ | 55.84 | 37.62 | 4.30 | 325.00 | 162.50 | 75.00 | 0.00 |
| Северо-Западный административный округ | 55.80 | 37.46 | 4.30 | 325.00 | 165.00 | 87.50 | 0.00 |
| Центральный административный округ | 55.76 | 37.63 | 4.30 | 500.00 | 190.00 | 86.00 | 0.00 |
| Юго-Восточный административный округ | 55.71 | 37.73 | 4.30 | 250.00 | 147.50 | 50.00 | 0.00 |
| Юго-Западный административный округ | 55.67 | 37.55 | 4.30 | 375.00 | 198.00 | 64.50 | 0.00 |
| Южный административный округ | 55.65 | 37.64 | 4.30 | 387.50 | 150.00 | 80.00 | 0.00 |
plt.figure(figsize=(10, 10))
plt.title('Распределение средних рейтингов кофеен по округам',fontsize=15)
ax = sns.boxplot(x='rating',y='district', data=moscow_coffee_house, orient='h',order=df_grouped.index);
plt.xlabel('Рейтинг', fontsize=13)
plt.ylabel('Округ',fontsize=13)
plt.xlim(3,5)
sns.despine()
Самый низкий рейтинг у кофеен ЗАО - 4.2, в остальных округах рейтинг одинаковый - 4.3, в САО самый большой размах рейтингов, тогда как в СЗАО самый маленький
df_grouped=moscow_coffee_house.groupby('district').median().sort_values(by='middle_coffee_cup')
df_grouped
| lat | lng | rating | middle_avg_bill | middle_coffee_cup | seats | is_24/7 | |
|---|---|---|---|---|---|---|---|
| district | |||||||
| Восточный административный округ | 55.79 | 37.75 | 4.30 | 400.00 | 135.00 | 55.00 | 0.00 |
| Юго-Восточный административный округ | 55.71 | 37.73 | 4.30 | 250.00 | 147.50 | 50.00 | 0.00 |
| Южный административный округ | 55.65 | 37.64 | 4.30 | 387.50 | 150.00 | 80.00 | 0.00 |
| Северный административный округ | 55.81 | 37.52 | 4.30 | 325.00 | 159.00 | 66.00 | 0.00 |
| Северо-Восточный административный округ | 55.84 | 37.62 | 4.30 | 325.00 | 162.50 | 75.00 | 0.00 |
| Северо-Западный административный округ | 55.80 | 37.46 | 4.30 | 325.00 | 165.00 | 87.50 | 0.00 |
| Западный административный округ | 55.73 | 37.49 | 4.20 | 600.00 | 189.00 | 96.00 | 0.00 |
| Центральный административный округ | 55.76 | 37.63 | 4.30 | 500.00 | 190.00 | 86.00 | 0.00 |
| Юго-Западный административный округ | 55.67 | 37.55 | 4.30 | 375.00 | 198.00 | 64.50 | 0.00 |
plt.figure(figsize=(10, 10))
plt.title('Распределение средней стоимости чашки капучино в кафейнях по округам',fontsize=15)
ax = sns.boxplot(x='middle_coffee_cup',y='district', data=moscow_coffee_house, orient='h',order=df_grouped.index);
plt.xlabel('стоимость чашки капучино', fontsize=13)
plt.ylabel('Округ',fontsize=13)
plt.xlim(50,400)
sns.despine()
Дороже стоит чашка капучино в ЮЗАО, на втором месте по стоимости - ЦАО, самая маленькая цена - 135 - ВАО
# посчитаем среднюю стоимость чашки капучино для каждого округа
middle_coffee_cup_df = moscow_coffee_house.groupby('district', as_index=False)['middle_coffee_cup'].agg('median').sort_values(by='middle_coffee_cup')
m = Map(location=[moscow_lat, moscow_lng])
# создаём хороплет с помощью конструктора Choropleth и добавляем его на карту
Choropleth(
geo_data=state_geo,
data=middle_coffee_cup_df,
columns=['district', 'middle_coffee_cup'],
key_on='feature.name',
fill_color='YlGnBu',
fill_opacity=0.8,
legend_name='Средняя стоимость чашки капучино по округам',
).add_to(m)
# выводим карту
m